<?php

namespace app\api\model;

use think\Model;

class Juhe extends Model
{
    protected $url;
    protected $config;

    public function __construct()
    {
        parent::__construct();

        $this->url = "http://v.juhe.cn/sms/send";

        $this->config = [
            'key'       => getenv('JUHE_KEY'),
            'tpl_id'    => getenv('JUHE_TEMPLATE'),
        ];
    }

    public function send($mobile)
    {
        $this->config['mobile'] = $mobile;

        $paramstring = http_build_query($this->config);

        $content = $this->juheCurl($this->url, $paramstring);
        $result = json_decode($content, true);

        if ($result) {
            if ($result['error_code']) {
                return json(['code' => 400, 'msg' => $result['reason']]);
            } else {
                return json(['code' => 200, 'msg' => $result['reason']]);
            }
        } else {
            return json(['code' => 400, 'msg' => '请求异常']);
        }
    }

    public function sendTpl($mobile, $tpl_id = '')
    {
        $this->config['mobile'] = $mobile;

        if($tpl_id){
            $this->config['tpl_id'] = $tpl_id;
        }

        $paramstring = http_build_query($this->config);

        $content = $this->juheCurl($this->url, $paramstring);
        $result = json_decode($content, true);

        if ($result) {
            if ($result['error_code']) {
                return json(['code' => 400, 'msg' => $result['reason']]);
            } else {
                return json(['code' => 200, 'msg' => $result['reason']]);
            }
        } else {
            return json(['code' => 400, 'msg' => '请求异常']);
        }
    }

    public function sendCode($mobile, $code)
    {
        $this->config['tpl_id'] = '259905';
        $this->config['mobile'] = $mobile;
        $this->config['tpl_value'] = '#code#=' . $code;

        $paramstring = http_build_query($this->config);

        $content = $this->juheCurl($this->url, $paramstring);
        $result = json_decode($content, true);

        if ($result) {
            if ($result['error_code']) {
                return ['code' => 400, 'msg' => $result['reason']];
            } else {
                return ['code' => 200, 'msg' => $result['reason']];
            }
        } else {
            return ['code' => 400, 'msg' => '请求异常'];
        }
    }


    /**
     * 请求接口返回内容
     * @param  string $url [请求的URL地址]
     * @param  string $params [请求的参数]
     * @param  int $ipost [是否采用POST形式]
     * @return  string
     */
    private function juheCurl($url, $params = false, $ispost = 0)
    {
        $httpInfo = array();
        $ch = curl_init();

        curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
        curl_setopt($ch, CURLOPT_USERAGENT, 'JuheData');
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);
        curl_setopt($ch, CURLOPT_TIMEOUT, 60);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        if ($ispost) {
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
            curl_setopt($ch, CURLOPT_URL, $url);
        } else {
            if ($params) {
                curl_setopt($ch, CURLOPT_URL, $url.'?'.$params);
            } else {
                curl_setopt($ch, CURLOPT_URL, $url);
            }
        }
        $response = curl_exec($ch);
        if ($response === FALSE) {
            //echo "cURL Error: " . curl_error($ch);
            return false;
        }
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        $httpInfo = array_merge($httpInfo, curl_getinfo($ch));
        curl_close($ch);
        return $response;
    }
}
